// 测试类：跨包调用entity包的对象，验证业务流程与权限控制
public class Main {
    public static void main(String[] args) {
        // 1. 实例化教师对象（子类），调用父类构造初始化共性属性
        Teacher t1 = new Teacher("T001", "张三", "男");
        Teacher t2 = new Teacher("T002", "李四", "女");

        // 2. 教师开课（调用Teacher特有方法）
        Course c1 = t1.openCourse("C001", "Java编程", "教学楼A101", "周一上午9:00-11:00");
        Course c2 = t2.openCourse("C002", "数据库原理", "实验楼B202", "周三下午2:00-4:00");

        // 3. 实例化学生对象（子类），调用父类构造初始化共性属性
        Student s1 = new Student("S001", "王五", "男");
        Student s2 = new Student("S002", "赵六", "女");

        // 4. 学生选课/退课（调用Student特有方法）
        s1.selectCourse(c1);
        s1.selectCourse(c2);
        s2.selectCourse(c1);
        s2.dropCourse(c2); // 退选未选修的课程

        // 5. 打印工作单（多态：调用子类重写的printWorksheet方法）
        t1.printWorksheet();
        t2.printWorksheet();
        s1.printWorksheet();
        s2.printWorksheet();

        // 权限测试：以下代码会报错（验证权限控制）
        // System.out.println(t1.id); // 报错：Person的id是protected，test包非子类不可访问
        // System.out.println(s1.selectedCourses); // 报错：Student的selectedCourses是private，不可访问
    }
}